�� ������ IntelliJ IDEA���� JUnit �� �Բ� �۾��ϴ� �ҵ带 ����մϴ�. ���� IDEA�� JUnit 3.8.1�� �Բ� �����˴ϴ�.
JUnit�� ���� �� ���� ���λ����� ����, http://www.junit.org �� �����Ͻʽÿ�.
JUnit�� ȸ�� ��Ʈ �����ӿ�ũ�Դϴ�.
JUnit�� ����ϴ� ������ �ҵ�� ��Ʈ ����� �����մϴ�. ��Ʈ ����� �����ϱ� ���� ����� TestCase Ŭ������ Ȯ���ϰ�
�ִ� ���� Ŭ������ ������ �ʿ䰡 �ֽ��ϴ�. ���� ����� ���� �̸� (���� ���, testSomething )���� test �� �Բ� ���۵Ǵ�
Ŭ������ �ҵ带 �߰��� �ʿ䰡 �ֽ��ϴ�.
���ø����̼����μ� ��Ʈ�� �����ϱ� ����, Ŭ������ �־�� ���� �ֿ��� �ҵ带 ����Ͻʽÿ�:
public static void main(String[] args) {
new junit.textui.TestRunner().doRun( new TestSuite(<testClassName> .class ));
}
�� �ٸ� ����� Ŭ�������� public
static Test suite() �ҵ� (Test �������̽��κ��� ������ � Ŭ����/�������̽���
����� ����� �� �ִ� ���� ���·μ�)�� �����մϴ�.
���ø����̼����μ� ��Ʈ�� �����ϱ� ����, Ŭ������ �־�� ���� �ֿ��� �ҵ带 ����Ͻʽÿ�:
public static void main(String[] args) {
new junit.textui.TestRunner().doRun(suite());
}
ù ��°��, ����� JUnit ����/����� ������ �����ϰ�, ������ �ʿ䰡 �ֽ��ϴ�.
���� ����, Run | Edit Configurations:
Run/Debug Configurations: JUnit�� ���ʽÿ�.
����� ��Ű��, Ŭ������ ���� �ҵ忡 ���� JUnit
��Ʈ�� ������ �� ���� ����� �ֽ��ϴ�.
Toolbar���:
Edit Entries... ������ ������ JUnit ������ �����ϰ� ����/������� �����մϴ�.

���� IDEA���� ����� �˾� ���� ����Ͽ� JUnit ������ ������ �� �ֽ��ϴ�.
editor ���� :
�װ��� ��Ʈ�ϴ� Ŭ���� ���� �Ǵ� �� �ҵ常�� ��Ʈ�ϴ� �ҵ� ���� ������ ��ư�� Ŭ���Ͻʽÿ�.


|
��ü Ŭ������ ��Ʈ�ϱ� ����, �ҵ� ���� �ۿ� ij���� �����ʽÿ�.
|

|
���� ����� main() ���� ���ο� ij���� ������ ��Ʈ�ϴ� ���� �ƴ� ���ø����̼� ����/����� ������
������ �� �Դϴ�.
|
��Ÿ���� ���� ���� Ŭ���� �Ǵ� �ҵ带 ���� JUnit
��Ʈ�� �����ϴ� ���� �����մϴ�.
Project
View ( Project Tab, Packages
Tab ) �� Commander ��� :
��Ʈ ������ �����ϴ� Ŭ���� �Ǵ� �ҵ�(Show
Members �� on�� �� Project
Tab�Ǵ� Packages Tab����),
�װ��� ��Ʈ �ϱ� ���ؼ� ��Ű���� ������ ��ư Ŭ���Ͻʽÿ�.

��Ÿ���� ���� ���� ��Ű��/Ŭ����/�ҵ带 ���� JUnit ��Ʈ�� �����ϴ� ���� �����մϴ�.
JUnit ���� �� ���� �ܰ��� ����� �� ������ ��ҿ� �� �ֽ��ϴ�.
ù ��°��, JUnit Run/Debug ������ ���õ� ��Ű��/Ŭ����/�ҵ带 ���� �ִ����� �߿��մϴ�.
�� ��°��, �װ��� �Ͻ����� �� �ְų� ������ �� �ִ� ���� Ÿ�Կ� �����մϴ�.
�������� ������ Ư���� ��Ű��/�ҵ�/Ŭ������ ���� ������ ������ �����Դϴ�.
���� ���� � ���� ���� �������� ������ ���ٸ�, ����� Run �Ǵ� Debug�� ������ �� �Ͻ����� �ϳ���
�ڵ������� �����˴ϴ�.

|
�Ͻ����� Run/Debug ������ ���ø����̼ǰ� ���ø��� ���� ���� ������ �� �ֽ��ϴ�.
|
�Ͻ����� ������ ���� Run/Debug ���� �߿��� �������� ����ϰ� �����˴ϴ�. ���� ���� �ϳ��� �Ͻ����� ������ ������ ��
�ֽ��ϴ�. ����� �������� ���� ���� ��Ű��/Ŭ����/�ҵ带 ���� ���� �Ǵ� ����� ������ ������ ���Ӱ� ������ �Ͻ�����
������ ������ �ӽ����� ���� ��ü�� ���Դϴ�.
Run "JUnit
configuration"
|
���� ��������/�Ͻ����� JUnit Run/Debug ������ �����ϰų� �װ��� �����ϱ�
���� �ӽ����� ������ �����Ͻʽÿ�.
|
Debug
"JUnit
configuration"
|
���� ��������/�Ͻ����� JUnit Run/Debug ������ ������ϰų� �ӽ����� ������
�����ϰ� �� ������� �����Ͻʽÿ�.
|
JUnit ��Ʈ ����� Run �Ǵ� Debug �� �������� Console �ǿ��� �����˴ϴ�.

�� ������� ������ ���� ��ҷ� �����˴ϴ�:
Test tree view, Output �� Statistics �� ���� �� ���� ����.
Test tree view �� Ʈ���� ���� �������μ� ��� ���� ����� ��Ʈ�� �����մϴ�. Ʈ�� ��� �̸��� Ŭ����/�ҵ� �̸���
��Ʈ�ϱ� ���� ��ġ�մϴ�. ��Ʈ �ҵ带 ���� ����� �ڰ��� �־����� Ŭ���� �̸��� Ʈ�� ��� �̸��� ���� ū ��ȣ��
�־����ϴ�. ��Ʈ Ŭ������ ����, ��Ű����, Ŭ������ ��ġ�ϴ� ���� �����ϴ�.
��� ���� �������� �� ���¸� �ݿ��մϴ�:

|
��Ʈ�� ���������� ����߽��ϴ�.
|

|
��Ʈ�� ǥ�� �Ǵ� ���� ������ �����߽��ϴ�.
|

|
��Ʈ�� ���� ������ �����߽��ϴ�.
|

|
��Ʈ�� �������� �ʾҽ��ϴ�.
|

|
��Ʈ�� �����˴ϴ�.
|

|
��Ʈ�� ���� �����ϰ� �ֽ��ϴ�.
|

|
��Ʈ�� �ߴܵǾ����ϴ�.
|
��Ʈ ���� ���� �켱 ������ �Բ� �ڽ� ����� "���� ����" ����� �����ϰ� �ִ� ���� �������� ǥ���մϴ�:
passed - not
run - running - interrupted
- assertion failure - exception
failure.
���� ��Ʈ Ŭ������ TestCase Ŭ������ Ȯ���ϰ� ��Ʈ �ҵ� �̸��� test �ܾ�� ���۵˴ϴ�. ����, ������ �� ���� ��Ʈ
���̽��� ���Ǵ� ���� ������ �ҵ� suite() �� ����˴ϴ�. �װ��� ������ Ư���� Ŭ���� �ν��Ͻ��� ���õ��� �ʴ� �� ��Ʈ��
��Ʈ�� �����ϰ�, �� ��Ʈ�� �ƴ϶� �ϴ��� ��Ʈ�� ���������� ������ �� �Դϴ�.
IDEA�� ��Ʈ Ŭ������ �з��� ��Ʈ �ҵ带 ��Ȯ�ϰ� ǥ���ϰ� suite() �� �ڽİ� �Բ� ���μ� Result tree view ����
��Ÿ���ϴ�. �ڽ� ���� suite() ���� ��Ʈ�Դϴ�.
���� ����� Hide
Passed ���Ͱ� �����ϰ� ��� ��Ʈ�� Ư�� ��带 ����Ǹ�, All
Tests Passed �� ��Ʈ ������ ������
��Ÿ���ϴ�.

���� Output ���� ������, Ʈ�� ����� ��Ҹ� �����ϴ� ���� ������ ��Ʈ�� ���� ����� ����� ǥ���մϴ�.
���� ���� Statistics ���� ������, ���� �����ϴ� ������ ������ ���Դϴ�.

|
������ JUnit ������ ����� �Ͻʽÿ�.
|

|
���μ��� ����� �����Ͻʽÿ�.
|

|
������ JUnit ���μ����� �����Ͻʽÿ�.
|

|
��� �� �����츦 �����ʽÿ�.
|

|
���� �������� ���ϴ�.
|
|

|
Hide passed ���� ����� ��Ʈ�� �����ϴ� ��带 ����� ���� �����ε˴ϴ�.
��� ���� ��Ʈ�� ���������� ����ǰ�, ���ο� ��� ��, All Tests
Passed ��ü Ʈ���� ġȯ�ϸ鼭 ��Ÿ���ϴ�.
|

|
���� ������ Track Running Test ��ư ���� ����Ǵ� ���� Ʈ�� ������ �̵��մϴ�. ���� ���ÿ�
�� ����� Output tab���� ���Դϴ�.
|

|
��� Ʈ���� Ȯ���Ű�ʽÿ�.
���� �� ��° ���� �бⰡ ������ ���ϴ�.
|

|
��� Ʈ���� ��ҽ�Ű�ʽÿ�.
���� �� ��° ���� �б�� ������ ���ϴ�. ����, ��Ʈ ���� ���� �ʿ��� ��带
���� Ŭ���ϴ� �Ϳ� ���� ��ҵ� �� �ֽ��ϴ�.
|

|
Ʈ�� ����� ������ ������ ��Ʈ�� �����Ʈ �Ͻʽÿ�.
|

|
Ʈ�� ����� ������ ������ ��Ʈ�� �����Ʈ �Ͻʽÿ�.
|

|
���� Select
First Failed Test When Finished �� ������, ij���� Ʈ�� ��� �ְ��� ������ ��Ʈ�� ������
�ڵ������� �Ű����ϴ� ���� �� ����� Output
tab ���� ǥ�õ˴ϴ�.
|

|
���� Scrolls
to Stacktrace�� ������, Output
tab ���� ��Ʈ ���и� �߱��� ���� ���Ͽ� ����/ǥ�� ���� ������
�������� ���� ��ô ����� ��ũ�� �մϴ�.
|

|
���� Autoscroll to Source �� ������, Test
tree view ���� ��Ʈ�� �����ϸ� �����Ϳ��� �ҽ����� (�ʿ��ϴٸ�
�װ��� ���鼭)�� �����Ʈ�մϴ�. �����Ϳ��� ��Ʈ�� ù ��° ���� ������ ij���� ��ġ�߽��ϴ�.
|

|
���� Open
Source at Exception �� ������, ������ �ҽ� �ڵ� (View
source, Edit source, Autoscroll to
source)�� ������ �ڵ尡 �ҷ����� ��Ʈ �ҵ� ���ο� ij���� �����ϴ� (���� ȿ���� ���� �������� ��Ʈ �ҵ�
������ Ŭ���ϴ� �Ϳ� ���� ���� �� �ֽ��ϴ�).
|
|
Test Status �г��� ��Ʈ ��Ȳ Output �� Statistics ���� ��ġ�մϴ�.

�װ��� ������ ��Ʈ ������ ���� ���¸� �ݿ��մϴ�:
Starting
|
������ ��Ʈ���� ���ݵ� ���۵��� �ʾҴ� ��Ʈ�� �־��� ���� ǥ�������� �����߽��ϴ�.
|
Running
|
��Ʈ�� ����� ���� ǥ���߽��ϴ�. ���ÿ� �� ���� �־����ϴ�. ù ��°�� �� ���� ��Ʈ�� �̹� ����Ǿ��°��� �����ְ� �� ��°�� ��Ʈ�� ��ü �����Դϴ�.
���� ��Ʈ�� ���� �����ߴ� ù��° ǥ�ð� ����Ǹ鼭, �ʴ� ��Ʈ�� �հ���Դϴ�.
���� � ������ ��Ʈ�� ������, ������ ��Ʈ�� �Ѱ踦 ���� ǥ���ϴ� Failed ���̺��� �Բ� ǥ�õ˴ϴ�. ���� �����ϰ� �ִ� ��Ʈ�� �̸��� ���� ǥ�õ˴ϴ�.
|
Terminated
|
���� ��Ʈ ������ ����ڿ� ���� �ߴܵǸ� ǥ�õ˴ϴ�. ���� Running�� ���ؼ��� ���� ���� �ǹ��մϴ�.
|
Done
|
��� ��Ʈ�� ����Ǿ��� ���� ǥ���߽��ϴ�. ���� Running
���̺� ���ؼ��� ���� ���� �ǹ��մϴ�. ���� ���� �ð��� ��� ��Ʈ�� �հ��ϱ� ���� ǥ���ϴ� �� �ٸ� ���̺��� ��Ÿ���ϴ�.
|
Progress Bar �� �� ���� ��Ʈ�� �Ǿ������� ǥ���մϴ�. �װ��� ���� ���� ���� �� �ֽ��ϴ�:
Green
|
���� ��� ����� ��Ʈ�� ���� ����Ǿ��ٸ� (��Ʈ�� ��� �͵� �������� �ʾҴٸ�)
|
Yellow
|
���� ��Ʈ ������ ����ڿ� ���� �ߴܵǰ� �̹� ����� ��Ʈ�� ��� �͵� �������� �ʾ�����.
|
Red
|
���� ������ ��Ʈ�� ������.
|
|
Output tab �� ��Ʈ ���� ���� ������ ������ ǥ���մϴ�. ��Ʈ ��尡 Test tree view���� ���õ� ��, ���� ���� ����
�Ӹ� �ƴ϶� ���� ����, ��� ��Ʈ�� ����� ǥ���մϴ�. ���� ���� � �ٸ� ��尡 ���õǸ�, ���� ���õ� ��忡 ����
��°� ���� ������ �� �ڽ��� �������ϴ�. �� ������ ��ũ�� �����մϴ�.
�װ��� Ŭ���ϸ� ����� �����Ϳ��� ij���� �����ϴ� �����ϴ� ���ο� �����Ʈ�մϴ�.

���ڿ� �� ���� ǥ���� ���� ��, ����� �ణ �ٸ��ϴ�. �̱� ������ ���ڿ��� �� ��, ���ڴ� ��� �������� ���ĵ˴ϴ�.

��Ƽ���� ���ڿ�(�� "\n�� �����ϴ� �װ͵�)�� ���� ��, ����� ��ũ�� �����մϴ�. ��ũ�� Ŭ���ϸ� ���ڿ� ���̿��� ���̸� ����
���Ͽ� Difference
View�� �θ��ϴ�.

Statistics ���� ������ ����/����� ������ ���� ���� ���� ��� ������ ǥ���մϴ�.

Test
|
����Ǿ��� ��� ��Ʈ�� ���� �հ踦 ǥ���ϴ� ù ��° ������ �����ϰ� �� ������ ��Ʈ���� ǥ���մϴ�.
|
Time elapsed
|
��Ʈ�� �����ϱ� ���� ����� �ð�.
Total ���� ��� ��Ʈ�� �հ� �ð��Դϴ�.
|
Usage Before
|
��Ʈ�� �����ϱ� ���� RAM ���.
|
Usage Delta
|
��Ʈ�� �����ϱ� ������ RAM ����� ����.
���� (RAM-after-test - RAM-before-test)�� ���˴ϴ�.
���� ���, ���� gc �� ��Ʈ ���� ���� �����Ǹ�, ��Ÿ ���� �װ�Ƽ���� �� �ֽ��ϴ�.
|
Usage After
|
��Ʈ�� �����ϰ� �� ���� RAM ���.
|
Results
|
�� Į���� ��Ʈ ������ ����� ǥ���մϴ�. �װ��� Passed, Error, Assertion�� �� �� �Դϴ�.
Total ���� �Ǵ� � ���� ��Ʈ�� ���� ������ ǥ��(F), ����(E), �������� ���(P) ��
�� ���� ��Ʈ�� �����ߴ°��� �����ݴϴ�.
|
|
�ǿ��� ������ �����ϸ� Ʈ�� ����� �����ϴ� ��Ҹ� �����մϴ�. ���� ����� �ǿ��� Į���� ���� Į�� ������
Ŀ���������ϱ� ���� �巡�� & ����� �� �ֽ��ϴ�.
���� ���� Test tree view���� ��带 �Ǵ� Statistics �ǿ��� ��Ҹ� ������ ��ư�� Ŭ���ϴ� �Ϳ� ���� �ҷ����ϴ�.
Run
"JUnit
Configuration"
|
above
�� ������ ���ʽÿ�.
|
Debug
"JUnit
configuration"
|
above
�� ������ ���ʽÿ�.
|
Jump
to Source
|
���� ���õǸ�, �����Ϳ��� ��Ʈ ���� ���ο� ij���� ��ġ�ϰ� �ִ�
���õ� ��Ʈ�� �����Ʈ�ϰ�, ������ �ű �ű�ϴ�.
|
Show
Source
|
���� ���õǸ�, �����Ϳ��� ��Ʈ ���� ���ο� ij���� ��ġ�ϰ� �ִ�
���õ� ��Ʈ�� �����Ʈ�մϴ�.
���� ������ JUnit
Result Tool Window���� �����˴ϴ�.
|
Select
in Tree
|
��Ҵ� Statistics �ǿ����� ��Ÿ���ϴ�. ���� ���õǸ�, Test
tree view����
���õ� �Ϳ��� �����ϰ� �ִ� ��Ҹ� �����մϴ�.
|
Output �� ���� ���� ������ �� ���� �����մϴ�:
Clear
All
|
��� â�� �����մϴ�.
|
Copy
Content
|
����� Ŭ�����忡 ī���Ͻʽÿ�.
|
���� ������ �Ϻ� Java ������ �̿��մϴ�. ���� �ڵ�� �Ʒ��� �����˴ϴ�.
1.
�ݷ����� ���ϴ� ��:
Ư���� ��� ���̽��� �ֽ��ϴ�: Difference
View �� �ݷ����� ���ϱ� ���� ���� �� �ֽ��ϴ�.
����� ���� ��Ƽ���� ���ڿ��� ��ȯ�ϰ� assertEquals(String,
String)�� �θ� �� �ֽ��ϴ�.
2.
Ư���� ��� ���̽�:
o��� ���̽�- ��Ʈ �ڷḦ ���Ͽ� �����ϴ� ��.
��츦 �������� ���� String
Collection �� ��Ʈ�ϴ� ���� �ڵ带 �����Ͻʽÿ�.
��Ʈ �����ʹ� ����, ��Ʈ(ù ��°�� ��Ʈ�� �ݷ���, �� ��°�� ���� ���)�� ���� �� ���Ϸμ� �����˴ϴ�.
IDEA�� ��Ʈ ���� ���� ���� ��η� ������ �� �ֽ��ϴ�.
ù ��°��, �츮�� ��Ʈ �ڷḦ �������� �߰��ϱ� ���� ���� �ҵ尡 �ʿ��մϴ�.
public class FSUtil {
public static final String IN_EXTENSION = ".in";
public static final String OUT_EXTENSION = ".out";
public static String[] findTests(File testData) {
File[] inputs = testData.listFiles(new FilenameFilter() {
public boolean accept(File dir, String name) {
return name.endsWith(IN_EXTENSION);
}
});
String[] names = new String[inputs.length];
for ( int i = 0; i < inputs.length; i++) { File inputFile = inputs[i]; String inputNameExt =
inputFile.getName(); String inputName = inputNameExt.substring(0, inputNameExt.length() –
IN_EXTENSION.length ()); names[i] = inputName; } return names;
}
}
���� ������ Ȯ���� �ִ� ������ testData �������� �˻��˴ϴ�.
������ �ڵ��� �Բ� ������� ���ϸ��� ����, ��Ʈ�� �����ǰ�, TestSuite�� �߰��˴ϴ�.
public class SortTestSuite extends TestSuite {
public SortTestSuite() {
super ("Sort tests"); // Suite node name in tree view
File testData = new File(".");
String[] tests = FSUtil.findTests(testData);
for ( int i = 0; i < tests.length; i++) { String test = tests[i]; addTest( new MyTestCase(test,
testData){});
}
}
public static Test suite() {
return new SortTestSuite();
}
}
MyTestCase�� �ϳ��� ��Ʈ �ҵ带 ������ Ŭ�����Դϴ�:
public void test() throws IOException { // Test method to run
String[] result = new Sort().sort(readStrings(input));
assertEquals(toLines(readStrings(output)), toLines(result));
}
�츮�� Sort Ŭ������ �־�� sort() �ҵ带 ��Ʈ�ϰ� �ֽ��ϴ�.
public class Sort {
public String[] sort(String[] strings) { //dummy sort method
Arrays.sort(strings);
return strings;
}
}
input�� ��Ʈ�� ���ڿ��� �����ϰ� �ִ� �ʵ��Դϴ�, output �� ����Ǵ� ���� ����Դϴ�.
readStrings() �� ���Ϸκ����� ���ڿ��� �а�, ���ڿ� �迭�� �����մϴ�.
toLines()�� ���ڿ� �迭�� ��Ƽ���� ���ڿ��� �ٲߴϴ�.
public abstract class MyTestCase extends TestCase {
private final String name;
private final File input;
private final File output;
public MyTestCase(String name, File parentDirectory) {
super ("test"); // Passing test method name
this.input = new File(parentDirectory, name + FSUtil.IN_EXTENSION);
this.output = new File(parentDirectory, name + FSUtil.OUT_EXTENSION);
try {
this.name = this.input.getCanonicalPath();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
public void test() throws IOException { // Test method to run
String[] result = new Sort().sort(readStrings(input));
assertEquals(toLines(readStrings(output)), toLines(result));
}
private String toLines(String[] strings) {
StringBuffer buffer = new StringBuffer();
for (int i = 0; i < strings.length; i++) { String string = strings[i]; buffer.append(string);
buffer.append(System.getProperty("line.separator")); } return buffer.toString();
}
private String[] readStrings(File file) throws IOException {
BufferedReader reader = new BufferedReader( new FileReader(file));
String line;
ArrayList lines = new ArrayList();
while ((line = reader.readLine()) != null) {
lines.add(line);
}
return (String[])lines.toArray( new String[lines.size()]);
}
public String getName() { // Test representation in tree view
try {
return input.getCanonicalPath();
} catch (IOException e) {
return super.getName ();
}
}
}

|
Result tree view �� ������ ����� �� �ְ�, getName() ���� ������μ� ǥ�õ˴ϴ�.
|
getName() �ҵ�� ������ �Է� �����Ϳ� �Բ� ���Ͽ� �� ��Ʈ�� �ݷ������� ���� ��θ� �����ϱ� ����
�������̵� �˴ϴ�.
o
��� ���̽� – ���� ��Ʈ ����
���� ��Ʈ ����/������� ���ۿ��� ����� �ͺ��� �� ���� ��Ʈ�� �ִٸ� IDEA�� ��Ȯ�ϰ� ���μ��� �մϴ�.
public class SortTest implements Test {
public int countTestCases() {
return 0;
}
public void run(TestResult testResult) {
File testData = new File(".");
String[] names = FSUtil.findTests(testData);
for ( int i = 0; i < names.length; i++) { String name = names[i]; new MyTestCase(name, testData){}.run(testResult);
}
}
public static Test suite() {
return new SortTest();
}
}
countTestCases()�� ���θ� �����մϴ� �ֳ��ϸ� �츮�� �� ���� ����Ʈ ������ �߰ߵǴ���, �� ���� ��Ʈ�� ����Ǵ����� ���� ������ ���� �ʱ� ���� �Դϴ�.
run() �� ������ ��Ʈ�� ��ij��, �����ϰ� ���� �մϴ�.
ù ��°��, �װ��� ����Ǿ��� �ͺ��� ��Ʈ�� �����ϴ� ���� ���� �����ϴ�. ����, IDEA�� �� ���� ��Ʈ�� �����Ǿ����� ����Ĩ�ϴ�. ���� ���� ��Ʈ�� �����ߴ� �ҵ�� ó���� �������� �ʾҽ��ϴ�. �� ��°��, ��Ʈ�� ���� Ŭ������ ���� ������ �˴ϴ�.
|